Skip to content

Fdwic swimlane deps - #4

Open
nalinaly wants to merge 215 commits into
poursoul:fdwic-swimlane-depsfrom
nalinaly:fdwic-swimlane-deps
Open

Fdwic swimlane deps#4
nalinaly wants to merge 215 commits into
poursoul:fdwic-swimlane-depsfrom
nalinaly:fdwic-swimlane-deps

Conversation

@nalinaly

Copy link
Copy Markdown

做了一堆 atomic 与 icache 相关的能力建设,在做shared版本时可以参考参考

qinchuanyu added 30 commits July 17, 2026 08:16
Inline runtime submit helpers into the caller translation unit, add empty-runtime and weak-submit-noinline controls, and harden object, symbol, layout, pytest, and device-matrix validation.
增加共享 PA 调度模型及 CCEC、AscendC、CPU 三种独立后端。

支持可配置 NOP、阶段 profiling、本地泳道采集与标准库转换。

迁移 PA atomic 分析,补充独立复现指南和关键路径中文注释。
覆盖 standalone PA 的共享 atomic 调用点,记录 site、op、任务归属和动态次数。

按原调用语义区分 return-ready 与 source-issue 边界;CCEC 通过返回值依赖 MOV 后读取 SYS_CNT,不插入 DSB,也不强制发布型 atomic 消费旧值。

将 Atomic 与 ClockBaseline 合并到 AIC/AIV scalar 泳道,补齐 Claim attempted/won schema,并以 atomic_trace_calls、逐核 record 数和 dropped 建立闭环。

泳道采集默认开启逐 atomic 记录,转换器补充边界标识、标量泳道布局和 schema 回归测试。

验证:转换器单元测试 4/4 通过;CPU、CCEC、AscendC 三后端构建通过;A5 CCEC b1 调度语义、atomic 计数、记录容量和泳道后处理全部通过,记录丢失为 0。
在 pa_scheduler standalone 目录内复刻已验证的 Main AICPU Path-A:dispatcher 负责安装内容指纹命名的 owner SO,mode0 JSON 注册统一 simpler_aicpu_exec 入口。

owner 在配置前保存 108 个物理子核的 PMU 控制与 selector 状态,只持有实际开放的 32 AIC + 64 AIV,并按 bitmap 完成失败回滚和退出恢复。

host 直接复用 owner control 内嵌的寄存器基址表,固定 Restore、MMIO unmap、device reset 的清理顺序,不再依赖外部 msprof 配置 selector。

增加 owner bitmap、1 AIC + 2 AIV 三元组、worker 槽位、物理角色和实际运行核集合闭环校验。

验证:精确暂存快照 CCEC 全量构建通过;A5 empty、100000 NOP、2x100000 NOP 三组均为 96/96 可信记录且 Restore PASS;total 中位数约 214、56568、112994 cycles。
为PA scalar性能分析增加可与单次atomic约160ns直接对照的I-cache miss量级,避免继续从热循环aggregate residual臆测单次开销。

测试方法:
- 新增CCEC icache-single PMU窗口和可配置的每核trial数
- 使用8B、128B line对齐的唯一目标函数,并在窗外执行64KiB指令sweep制造capacity eviction
- cold/warm复用同一target、harness与PMU gate;warm预取放在read-clear前,避免窗外事件污染
- 每个phase丢弃一次分支训练样本,并在各角色内平衡cold-first与warm-first顺序
- 同时读取CNT_TOTAL、CNT6、CNT7和1GHz sys counter,以cold-warm差值计算cycles/ns per miss
- 构建期强制校验target、harness、thrash的符号尺寸、128B对齐和链接顺序

正确性门禁:
- 逐核要求cold CNT7等于trials、warm CNT7等于0
- 要求cold-warm周期和时间差为正,且96个物理子核全部完成配对校准
- host分别输出ALL、AIC、AIV统计及可直接用于scalar归因的换算公式
- 与远端atomic_trace_calls合并后,WorkerResult诊断sidecar按64B扩展到832B;生产DistCore ABI及既有字段offset不变

A5实测结果:
- 64 trials/core连续10轮全部通过,ALL中位86.596ns/miss,范围86.532到86.792ns
- 128 trials/core连续5轮全部通过,ALL中位89.629ns/miss,范围89.615到89.648ns
- 15轮均满足每次cold严格增加一个CNT7 miss且warm miss为0
- AIC/AIV只相差数ns且方向随时段变化,不建立角色伪精确常数
- scalar分析统一采用T_icache_est_ns = CNT7_miss_total * 90;1000次miss约为90us

使用边界与文档:
- compulsory、capacity、conflict miss都会计入CNT7总数
- 90ns是96核并发cold/warm校准的一阶等效标尺,不宣称为预取、重叠miss和不同下级命中条件下严格可加的stall
- 同步更新PA分析、独立复现指南和atomic_probe测试数据表,记录原始日志、AIC/AIV分项及公式

验证:
- 合并远端最新atomic泳道提交后,CCEC完整构建、mixed ELF及I-cache布局检查通过
- CPU构建与smoke全部通过
- 原始A5 icache-single长测及暂存快照短测通过96/96核和精确CNT7门禁
- git diff检查通过
在每个worker的参数构造前至最后一次Submit返回后门控PMU,采集CNT_TOTAL与CNT0..8并记录实际start/stop状态。

校验owner bitmap、worker映射、物理角色、triplet和计数器风险门槛,按ALL/AIC/AIV导出PMU-only JSON;仅在owner恢复与runtime清理成功后无覆盖发布。

补齐CPU/AscendC空hook与runner后端门禁。
记录逐atomic边界、计数闭环和256 batch ClaimMax定量归因。

补充自包含owner、submit-all PMU-only JSON合同、三轮256 batch原始取数及使用限制。
# Conflicts:
#	tests/atomic_probe/pa_scheduler/PA调度器独立复现与泳道使用指南.md
#	tests/atomic_probe/pa_scheduler/ccec/build.sh
#	tests/atomic_probe/pa_scheduler/ccec/host.cpp
#	tests/atomic_probe/pa_scheduler/ccec/kernel.cpp
#	tests/atomic_probe/pa_scheduler/ccec/pmu_probe.h
#	tests/atomic_probe/pa_scheduler/common/pa_model.h
#	tests/atomic_probe/pa_scheduler/run.sh
- 为 QK/PV 接入完整 128x128 Cube matmul 流水,为 SF/UP 接入 Vector add/mul 流水并等待 GM 写回完成
- 增加显式 real-compute 模式、分类型迭代次数、独立 workspace 与 active/sentinel 数值校验,默认仍保留三后端 scalar-nop 基线
- 将负载模式、次数、计算单元映射写入 PMU sidecar 与泳道元数据,并校验 Submit placement 和非零引擎计数闭合
- 加强 mixed ELF 入口与 LOCAL helper 构建门禁,补齐参数边界、转换器回归和中文复现文档

验证:CCEC scalar/real b1、real b256、b8 count1/count2 PMU、real b1 泳道、AscendC/CPU smoke、converter 5/5 均通过
- 抽取三后端共享的winner workload布局、参数解析与数值校验\n- AscendC AIC执行完整128x128 Cube矩阵乘流水并等待GM写回\n- AscendC AIV执行Vector Add/Mul流水并等待GM写回\n- 修正A1/B1共享L1的地址重叠和普通KxN右矩阵的分形转置\n- 将真计算数值结果和模式计数纳入语义门禁及泳道元数据
- CPU按相同workspace与角色路由执行完整矩阵乘、逐元素加法和乘法\n- 保留scalar-nop回归入口且不伪造A5引擎PMU\n- 将真计算输出和泳道元数据纳入CPU语义门禁\n- 顶层runner向三后端开放统一winner workload参数并继续限制CCEC专属PMU
- 为三后端增加constant与layout-diagnostic输入模式\n- 以带权对角A和非对称B逐元素验证转置、ND/NZ与输出重排\n- 将输入模式写入泳道及CCEC PMU sidecar并校验非法元数据\n- 固化CCEC、AscendC、CPU分层上板结果与真实负载使用说明\n- 保持constant性能默认及scalar-nop回归路径不变
将三后端无参数 winner 负载切换为 real-compute/6,28,4,1。

保留 NOP override 兼容入口并让 smoke 显式使用零 NOP;同时记录 Case1 fanin 拓扑、数值数据流边界和同泳道口径性能。
将 standalone PA scheduler 中已经验证的 atomic 观察语义迁入 fully_distributed_within_core,使真实 A5 PA 在 level 4 下能够直接生成可分析的 scalar atomic 泳道,同时避免逐次记录热轮询导致设备内存和 JSON 规模失控。

设备端:
- 将 FDWIC raw ABI 升级为 schema v3,使用 32B 紧凑记录,并把不变的 core/block/lane 拓扑收敛到每核 64B 状态;继续复用 65536 records/core 分区。
- 为真实 PA 热路径接入 28 个稳定 atomic site 和 load/exchange/fetch_add/fetch_max/fetch_sub 五类操作;直接调用保持 call_count=1。
- direct span 按 atomic -> end/return_ready -> count -> record 排序,确保本地计数更新、PollBatch 落盘和记录写入不混入单次 atomic 的观测区间。
- 仅在显式 scheduler 等待区聚合九类 observation load;唯一的 RMW 例外是 won_lane_claim_exchange 的 old=1、desired=1 幂等失败重试,成功的 old=0 -> 1 claim 和其他 RMW 仍逐次记录。
- PollBatch 通过 flags 高 24 bit 保存精确 call_count,到 0xFFFFFF 时立即落盘并从 1 重开;保留 region、phase、lap 和最终 flush 闭合。

Host 与转换器:
- A5Sim/onboard runner 透传 level 4 配置并管理 trace 生命周期;host 按核只搬运 count*32B 有效记录,校验 header、拓扑、site/op、时钟基线、容量和 dropped 状态。
- 同时维护逻辑调用数与物理记录数,强制满足 atomic_records = atomic_calls - batched_poll_calls + poll_batch_records,并逐核、全局复算 raw 闭环。
- 共享 converter 识别 schema v3 direct Atomic、PollBatch 和 ClockBaseline,将事件放回真实 scalar lane,标注 batch 语义与逻辑等待包络,禁止把 batch duration 当成单次 atomic latency。
- converter 镜像校验全量 site/op、result_used、return_ready、value_zero、FetchMax payload、每核双 ClockBaseline、cycle 范围和 producer summary,拒绝格式或计数不闭合的本地 raw。
- 输出精确 call_count,支持以 sum(call_count * calibrated_atomic_cost) 估算 scalar core-work;统一按 160ns 标尺时可直接使用 atomic_calls * 160ns。

测试与实测:
- 新增 converter 正反向用例,覆盖十类合法 PollBatch、24 bit 最大值、A5/A5Sim return_ready 差异、坏 direct/clock/timing/summary 拒绝路径;相关 Python 测试 57 项通过。
- 新增直接调用 production accumulator 的 C++ GTest,验证第 0xFFFFFF 次落首批、第 0x1000000 次以 count=1 重开,flush 后状态清零且 dropped=0。
- 修订后的 AIC/AIV 和 A5Sim kernel 均已重编;真实 A5 device 0 上 PA Case1 level 4 通过:115200 次逻辑 atomic、110006 条物理 Atomic、340 条 PollBatch、dropped=0。
- 额外用真实 A5 Benchmark BGEMM/Bgemm64 验证非 PA 算子:1072 次逻辑 atomic、939 条物理 Atomic、27 条 PollBatch、dropped=0。
- 更新中文复现文档,记录十类聚合规则、schema v3、容量口径、计数公式、160ns 归因边界及最终真机产物。
从每轮96核原始PMU记录重算并校验ALL/AIC/AIV统计,聚合独立进程后优先报告AIV平均每核request、miss与p95。

明确区分90ns串行等效标尺和实际暴露损失,并记录同语义配对A/B才可用ΔSubmit与Δmiss完成性能归因。
- 对齐真实PA的15个atomic site及return-ready/source-issue语义
- 将六类显式等待轮询聚合为携精确次数的PollBatch
- 在phase、lap和Kernel边界关闭等待包并补齐96核计数闭环
- 使用仅GM指针与标量的非内联落盘函数,避免CCEC栈对象跨调用损坏
- 增加24位拆批、嵌套region、allowlist、拓扑与raw转换回归
- A5 b1/b256语义、计数与真实计算校验通过,b256 Submit为5.774 ms
拆分无泳道的 submit-pmu 构建,使用四件套 manifest 固化 phase 身份与产物校验。

以 CNT6/7 保留完整 Submit 权威计数;none 要求逐核精确闭合,running phase 显式报告 read-clear 下界、loss 与保守上界,并补齐逐核调用和 A5 拓扑门禁。

增加 raw 独立复算、负向回归与中文 I-cache 使用文档,明确 90ns 仅为 core-equivalent 标尺。
在Submit开头唯一的EfDrain调用点划定编译期PMU边界,按每核5B次调用闭合host、device与离线分析器门禁。

完成b1/b256真实计算负载A5验证:调度语义、真实计算输出、96核拓扑及观测边界全部通过;局部read-clear仅按同一ELF下界与误差包络解释。同步完善构建入口、负例测试和中文使用文档。
- 退役WaitForSlot局部PMU及wins兼容字段,分析器明确拒绝旧phase ID 3
- 新增Materialize与Register编译期观测窗口,按每核5×batches校验调用闭环
- 保留完整Submit primary计数,输出局部read-clear下界与保守上界
- 增强selector、counter位宽、风险阈值、total/scalar及shadow关系的独立复算
- 自动生成自包含HTML,增加ALL/AIC/AIV局部占总体比例图
- 将宽数字表和逐核图限制在独立滚动区域,修复页面内容越界
- 补充I-cache使用指南、scalar wait指标支持边界及A5 b1/b256实测记录
- 完成60项单元测试以及A5语义、PMU拓扑和owner恢复验证
- 完善独立 Submit PMU 的逐核 I-cache、scalar 与阶段时间校验及 HTML 汇总\n- 将 schema-v4 Submit、编排和最终排空划分为严格排他区间,离线拆分内部、尾部与 Submit 间 residual\n- 删除无真实计算的 loser 伪阶段,瘦身 Perfetto 事件并保持 raw 记录规模不增长\n- 接入独立闭合分析器,补齐单元测试、A5 b1/b256 实测证据和中文使用文档
在standalone PA的Alloc和普通Submit重型winner路径上补充低概率分支提示,减少高频loser跨越内联重块后的尾部开销。

记录B1交错复测、B256闭合门禁及关闭泳道ABA结果,并保留AIC/AIV代码体积增长作为后续I-cache验证项。
将真实PA的BuildWinner与AllocComplete分支标记为低频winner冷路,保持Fanin、atomic观测和泳道边界不变。

记录当前观测版5.631ms到5.192ms的A5三轮验证,并明确该收益主要恢复atomic观测接入后的代码布局回退,尚未优于历史5.116ms基线。
qinchuanyu added 11 commits July 27, 2026 06:53
抽取单调reclaim候选发布原语,并在exact writer turn下组合最慢reader完成前沿;保留唯一ordered actor前提,不把隔离helper提前接入PA热路径。

在shared ring测试中把future writer精确插入reader首次seq检查与payload复制之间,验证慢reader未关闭时满桶CapacityBlocked且控制字、payload和提交前沿全量不写。

reader关闭task 2后按H=2精确回收producer 0的八条region,回绕复用物理槽并以绝对seq拒绝旧cursor;覆盖CAP 32/64/128/256/16384及ASan/UBSan。

同步更新独立使用指南与shared迁移记录,明确测试夹具常量修正、private隔离结果、CCEC构建结果,以及A5编译器/设备顺序仍留待下一阶段闭合。
把原WriterIntentSet专用probe更名并扩展为shared protocol probe,在AIC/AIV上显式实例化reader_done连续CAS与基于最慢reader的reclaim refresh。

继续对cube/vector object分别做真实静态链接,沿用独立子shell EXIT清理,确保probe不进入正式mixed ELF且不改变PA代码布局。

使用本用户CANN 9.1完成shared CCEC全构建,AIC/AIV probe、split finish、1:2 mixed ELF、符号与manifest均通过;文档明确本提交尚不构成A5跨核顺序证据。
将既有history litmus原地迁移为shared-protocol多场景框架,统一复用约1GiB稀疏state、ACL生命周期、AIC/AIV mixed ELF构建和artifact身份校验。

control新增显式scenario并更新magic/version;host、device dispatcher和manifest均拒绝非法场景。保留history独立初始化、独立强断言及双方向单进程语义,移除旧action和重复脚本入口。

验证:bash语法、AIC/AIV O3编译、无__multi3/未解析全局符号、双入口metadata/无重定位、host与manifest SHA全部通过;新artifact上history AIC到AIV及AIV到AIC各跑1个新进程,12项语义断言与资源清理全部PASS。
- 将history门槛泛化为shared protocol多场景载体,增加ordinary满环reader到reclaimer双向动态场景\n- 构造CAP=128生产可达历史,验证慢reader阻塞、reader_done发布、精确退休及cursor 128复用\n- 分别保留compiler clobber、payload dependency和DSB_ALL三种reader-close观察口径\n- 用AIC/AIV O3 IR门槛锁定五字段FNV依赖、CAS参数、同signal gate和成功分支最终返回\n- 增加非目标槽、反方向状态、symbol/history隔离断言,并为独立host进程增加60秒失败上限\n- 更新standalone使用指南与shared TensorMap记录,明确证明范围、manifest身份及已撤回的错误测试构造

验证:shared CPU全套PASS;AIC/AIV CCEC构建与IR检查PASS;五种IR反向变异均被拒绝;A5 all×1为8/8 PASS,all×20为160/160 semantic/cleanup PASS。
SharedLookupRegion 在初始控制跨度异常时二次读取单调 head,修复旧 head 与新 tail 组成的合法混合快照;扫描期 seq 双检失败时,仅在新 head 已越过失败 cursor 后跳过退休前缀。正常 lookup 路径不增加 atomic,其余异常继续按协议错误拒绝。

新增两类确定性交错、活跃槽 seq 损坏和真实超容量反例。门槛以 reader_done 推导回收,连续两次回收与整批复用期间 committed_tasks 始终为 0,锁定实现不依赖全局 exact turn。

验证:GCC 13 下 CAP=32/64/128/256/16384 全通过,完整 shared CPU 测试通过;CANN 9.1 CCEC 的 AIC/AIV、正式入口、1:2 mixed ELF、零 relocation 与 manifest 构建通过。设备被其他任务占用,本提交不包含 A5 动态结果。
新增 SharedTryAppendReaderGatedTask,完全脱离 committed_tasks:空 ordinary batch 零共享访问;非空正常路径先复用已发布 reclaim_upto 做整批预检,只有 CapacityBlocked 才扫描 reader_done、刷新回收边界并重试,避免每个 writer 无条件增加 96 次 atomic load。

满环门槛改为合法的 reader-close→可重试 batch 流程。覆盖慢 reader 阻塞后关闭转 Ready、独立桶前项不因后项阻塞而部分发布、同桶仅一空槽拒绝两项整批、后项 seq 损坏不发布前项;所有路径 committed_tasks 始终为 0。

验证:GCC 13 下 CAP=32/64/128/256/16384 及完整 shared CPU 全通过;CANN 9.1 下 AIC/AIV 显式实例化、静态链接、正式 1:2 mixed ELF、metadata、零 relocation 与 manifest/hash 检查通过。设备占用期间未执行 A5。
将 SharedPublishTaskCommit 从先 Exchange 再补偿恢复,改为只允许 N 到 N+1 的单次 CAS。重复、陈旧或未来 actor 失败时不再短暂暴露错误前沿。

补充 CPU 原子事件门槛,固定失败发布仅产生一次不改状态的 CompareExchange;同步记录单 owner、仅插入有序的新开发合同,并明确撤回逐 task loser writer-ready 的过程态方向。

验证:shared CPU 完整构建通过,CAP=32/64/128/256/16384 的 ring 门槛及其余 shared 独立测试全部 PASS。
将 standalone shared Submit 从 private 热路径中拆出独立控制流:Claim 唯一 owner 才构造参数和 Materialize,loser 直接关闭 Submit,不等待插入前沿,也不读取 TensorMap。

owner 在私有上下文准备精确 writer delta,拿到 task-id exact turn 后依次发布 symbol history、ordinary region 和 fresh output,最后推进插入前沿;前沿发布后再执行 fanin lookup、Build 和 slot/drain,使不同 owner 的查询、构建和任务执行保持并发。

统一 ordinary、symbol history 与显式 owner 的 producer 过滤到 [N-H,N),拒绝 self/future 和非法 owner;同步更新泳道阶段、host 计数、前端参数统计与 split CCEC 路径。删除依赖旧 writer-ready 合同的过渡测试,增加 loser 零 sidecar Load、Build/执行跨 owner、空写集合、INOUT、三类元数据混合发布和满桶不改状态门槛。

验证:CPU shared 全套 CAP=32/64/128/256/16384 通过;B1/G4、B256/G1 与 B1/G4 泳道 6964/6964 通过;当前源码下 CCEC AIC/AIV generic、正式入口、split finish、1:2 mixed ELF、LOCAL helper、零 relocation 和 manifest 校验通过。设备未空闲,本提交不声称 A5 上板结果。
将 shared TensorMap 拆为唯一 Claim owner 与轻量 loser,仅串行发布 ordinary、symbol 与 fresh-output writer 元数据;交出 insert turn 后再执行 fanin lookup、Build 和任务调度,使后继 owner 可以跨 task 并发推进。

通过不可变 symbol writer history 与 ordinary ring 查询统一约束 producer∈[N-H,N),覆盖空写 task、ordinary/symbol INOUT 覆写链、混合元数据事务和满环整批失败不改状态。

将同一枚有序 baton 的物理落点扩展为 turn-G1/G2/G4/G8,保持固定八线 ABI,并为 CPU/CCEC 产物加入 G 身份、精确产物选择和错配拒绝。增加四组 turn 原语、96-thread ordered-submit、跨 owner Build/执行重叠及 post-Claim loser 零 sidecar 访问门槛。

验证:CPU shared G1/G2/G4/G8 与 private G1 完整构建、B256 语义及后处理通过;CCEC shared G1/G2/G4/G8 与 private G1 编译、链接、manifest、ABI 和 SHA 门槛通过。非法 G、private+G2、AscendC/all+G2 及产物 G 错配均按预期拒绝。本提交不宣称 A5 动态验证或性能收益。
在保留Register父区间及Submit排他统计口径的前提下,为每个shared winner仅新增一条元数据发布detail,并由父子端点离线还原等待插入轮次、发布TensorMap元数据、交接下一轮次三个闭合子段。

等待终点依赖最后一次Ready Load返回值,交接终点依赖N到N+1 CAS返回值;不引入DSB,不逐poll取时。针对O3会用Ready分支事实把返回值常量传播成task_id的问题,CCEC用一条MOV派生独立的比较值与计时依赖值,AIC/AIV优化IR均验证atomic Load到SYS_CNT的依赖链仍在;该逻辑只存在于swimlane构建。

同步更新设备记录数闭合、shared稀疏流校验、merged泳道转换和排他分析,确保detail不重复计入Submit,并拒绝缺失、重复、越界、身份不一致、loser误记和孤立Register父记录。

CPU shared完整门槛、69项Python转换与分析测试、CCEC G8构建以及A5 G8 B1/B256泳道均通过。最终B256的1280个Register精确闭合:等待插入轮次占99.000%,元数据发布占0.791%,交接占0.209%;诊断Submit单样本为25.361ms,不用于候选性能裁决。
新增仅使用两个AIV的CCEC精确探针,复刻64B TaskCell中deps_prepared的字段位置,并为每个场景和轮次分配独立cacheline存储。通过独立role/ready/phase/ack控制行建立writer-reader握手,关闭编译器自动DCCI,使用compiler barrier与DSB共同固定发布和观测边界。

Host端覆盖五类路径:TaskCell共线CAS后DCCI、共线普通写后DCCI、deps独占行CAS后DCCI、独占行普通写后DCCI、独占行普通写且无DCCI。判定同时核验CAS返回值、DCCI前后atomic poll、完整64B快照、host最终值、guard、控制状态和参与AIV拓扑,拒绝第三值、撕裂和新值回退。

A5最终版独立执行两次,每次每场景100轮:共线CAS新值100/100被后续dirty TaskCell DCCI覆盖;atomic-only独占行100/100保留新值;两种普通写路径均由DCCI前0/100可见变为DCCI后100/100可见;无DCCI对照本次0/100可见且仅作为观测。所有精确断言通过,semantic_failures=0。

同步更新ATOMIC_USAGE_GUIDE,明确DCCI不要求逐条机械追加DSB,但任何依赖DCCI完成的发布边界必须使用DSB或等价完成机制;并将探针接入ccec/run_all.sh。验证包括CCEC AIV编译/链接、A5两轮100次上板、Host -Wall -Wextra -Werror语法检查、bash -n及diff-check。
@nalinaly
nalinaly force-pushed the fdwic-swimlane-deps branch from 356a17b to 4e8794f Compare July 28, 2026 11:46
重构 shared TensorMap 的有序 Submit 协议:保留原有 Claim cursor,将 writer 元数据完成链迁到每 task 独占的 TaskCell::deps_prepared。task 0 直接进入,task N 只等待 task N-1,并在元数据可见后 CAS 发布自身完成字;旧 sidecar turn 保留为 generation 11 的历史 ABI 字段但不再参与热路径。

将 PublishSharedTaskOutputs 从全局 task-ID 串行区提前到 Materialize 尾部。唯一 Claim winner 只写 shared_outputs[task_id] 独占 cell,批量复制并 flush TensorDesc 后再发布 published;ordinary/symbol writer history 与 INOUT 顺序仍留在 Register。补齐 metadata 或 handoff 失败时的 output rollback,保持 descriptor-ready、deps-prepared 和 kernel completion 三类门槛互不冒充。

扩展 schema-v5 泳道与 atomic 观察:记录 predecessor PollBatch、completion CAS、Materialize output/copy/flush 三层 detail,并由 converter/analyzer精确闭合 Materialize、task-output 和 Register 排他分区。同步补充 G1/G8/G32/G64/G128、B256/B512、per-task completion 及 A5 B256 的测试记录和使用说明。

核心性能结果:在相同设备、B256、1,280 tasks、96 workers、shared TensorMap、real-compute 6,28,4,1 和 final barrier two-16 下,perf-clock 明确关闭 swimlane、atomic trace、PMU、phase 与 kernel timing。outputs 留在 Register 串行区的四个正式样本为 8.356157/8.356489/8.351957/8.355702 ms,中位数 8.3559295 ms;移到 Materialize 后为 2.906899/2.941103/2.939350/2.951372 ms,中位数 2.9402265 ms。中位数减少 5.4157030 ms(64.8127%),前后比 2.8419x,全部 execution、semantic、postprocess PASS。

分阶段证据:仅将 insert baton 改为 per-task completion 时,trace-free 中位数已由历史 G128 的 9.371635 ms 降到 8.376102 ms(-10.6228%);最终 output 迁移后的 level-4/atomic-trace 泳道 Submit 为 3.464587 ms,并证明 output 包络工作量与迁移前同量级。净性能结论以四组无泳道 A/B 的 2.9402265 ms 为准。

验证:python3 test_swimlane_converter.py(51项通过);python3 test_swimlane_exclusive_analyzer.py(31项通过);./cpu/build.sh shared swimlane 全套通过,覆盖 per-task completion、shared output symbol、writer intent、heap、Claim、Materialize 与 96-worker ordered Submit。
@nalinaly
nalinaly force-pushed the fdwic-swimlane-deps branch from 4e8794f to b0f846f Compare July 28, 2026 11:49
qinchuanyu added 16 commits July 28, 2026 12:51
在winner本地准备阶段冻结task身份及ordinary/symbol writer数量,正式发布路径不再重复Inspect、Validate和producer扫描。

为reclaim_upto=-1增加no-retire预检快路径,保留容量与seq校验;将成功统计移到completion CAS及Register取时之后,失败前缀只保留故障现场而不记入提交统计。

补充no-retire共享访问边界、completion CAS失败不记账等测试,并通过shared CPU全量门槛与CCEC AIC/AIV构建。
在等待前驱完成之前预计算 ordinary bucket、同桶序号和 symbol key,Register 串行区直接消费不可变 writer delta,避免重复 hash、同桶扫描及 symbol args 扫描。

移除仅用于丢弃的 ignored_fanin;依据 fresh-output descriptor 发布、per-task completion 与 insert turn 的传递关系,将正式 ordered 路径的 published 轮询收敛为一次精确检查,同时保留通用等待接口。

A5 B256 shared G1 实测:swimlane Submit 3.392893 ms,相比 R5h 同口径 3.464587 ms 下降 2.069%;Register 累计 core-work 下降 46.642%,其中 predecessor wait 下降 51.292%、writer metadata 下降 36.191%。trace-free perf-clock 单次为 2.482874 ms,方向优于 R5h 四样本中位数 2.9402265 ms;因本机无 task-submit/npu-smi,该项明确记录为 device 0 无锁单样本,不冒充稳定交错收益。

CPU shared 全量、CCEC AIC/AIV generic probe、mixed ELF、host runner,以及 A5 B256 swimlane/perf-clock 的 execution、semantic、postprocess 和泳道闭合均通过。
- 对照private region lookup与shared symbol writer的fanin语义
- 说明统一ordinary TensorMap的可行路径、协议前提和成本
- 记录PA Case1操作量及正确性与性能验收口径
用Output、Inout和Input任务链对比private与shared fanin,并补充future writer、missing past及alias/view反例。

细化DCCI可见性、各路径操作成本、候选方案边界和可执行验收口径。
按每核相邻 Submit 起点构造 actor 周期,避免把 Submit 尾部工作移动到 transition 后误判为 loser 收益。

分别统计 winner/loser 的 gross、control、Submit、EfDrainControl、Claim、post-Claim tail、post-transition 与 KernelUnion,并输出总量、均值、中位数和 P95。

增加单 actor、分类聚合及 OrchestrationReplay 全局闭合校验;Kernel 时间仅从 control 中扣除,atomic 等 scalar 调度成本仍保留。

补充边界搬移门槛测试,验证 Submit 尾部移动 10 cycles 时 actor gross/control 保持不变。

验证:pa_scheduler analyzer 单元测试 32 项通过;完整 converter/analyzer 门槛 83 项通过;真实 B256 raw 闭合为 1280 winner、121600 loser。
问题:shared replay 的96个actor在每个task开始时都会清零完整SubmitContext,但121600个loser实际只消费task身份和稳定output symbol;winner-only的payload、result、fanin及private joint字段落在相邻Submit间隙,形成无效scalar工作。

修改:新增shared专用轻量Begin,只推进local_index并重置task_id/shared_result;Claim owner确定后才绑定worker payload并初始化result与fanin。private路径继续使用原完整Begin,Claim结果字段仍对所有actor显式覆盖。

正确性:shared CPU全量门槛、CPU B256 host oracle、96-worker ordered Submit全部通过;CCEC swimlane/perf-clock的AIC/AIV入口、split runtime/finish、mixed ELF、host和manifest检查全部通过;A5 B256 execution/semantic/postprocess/exclusive均PASS,485796条记录无drop。

性能:loser后继SubmitTransition中位数399ns降至335ns,累计core-work下降8.424%。10次perf-clock中位数2458.6665us降至2436.4655us(-0.903%);6组同设备baseline->candidate交错中5组改善,配对差值中位数-46.838us(相对基线中位数-1.900%)。同时记录并撤回仅缩短泳道尾部、perf-clock无收益的direct-close候选。
shared SlotReady 在遇到未就绪依赖时压缩已经确认 ready 的本核 fanin 前缀,后续 EfDrain 只轮询 blocker 及未检查后缀;全部依赖就绪后清零计数。完成 flag 仅在单轮 kernel 内按 0→1 单调发布,private 路径保持原扫描逻辑,不增加共享状态、ABI、atomic 或泳道字段。

同步收紧 host oracle:shared 要求 fanin_ready_loads 与 fanin_edges 精确相等,证明每条依赖只命中一次 ready;补充首项阻塞不改数组、连续三阶段压缩和最终清空的 CPU 门槛,并明确 fatal 诊断只保留剩余未就绪后缀。

验证:shared CPU 全量/B256、private CPU 全量/b1、CCEC perf-clock/swimlane 构建和 A5 B256 全部 PASS;依赖签名保持 b7d985d6edb07078,A5 最终复跑 fanin_ready=1280。六组正反顺序 ABBA 均改善,12 样本均值 2436.837→2416.486 us(-20.350 us/-0.835%),中位数 2430.577→2415.203 us(-15.374 us/-0.633%);ready 重复读取下降 82.427%,总 fanin loads 下降 13.661%。

记录泳道观测边界本身对 1~2 us loser 数值的影响、11 个撤回候选及本轮保留依据;带泳道 loser Submit mean -2.054%、EfDrain mean -4.266%,ClaimMax 基本不变,证明收益落在重复 fanin 轮询而非 Claim atomic。
基于远端e42aba58及三个相邻优化提交分别重建干净的CCEC shared perf-clock产物,固定G1、B256、8192 context、real-compute 6,28,4,1与two-16,记录两轮预热和12个位置均衡区组。

48个独立正式进程全部通过任务数、Claim数、依赖签名、TensorMap与真实计算门槛。R5k和R5l端到端均值分别改善0.869%和0.912%,继续保留;R5m相对R5l回退1.944%,12/12区组全部回退,超过新的1%门槛,明确撤回且不进入待推送代码。
新增独立的 CCEC 与 AscendC AIV 用例,覆盖 DCache baseline/preload、ICache cold/current-PC async/current-PC wait 五种模式。CCEC 直接调用 dc_preload、icache_preload 和 get_icache_prl_st,AscendC 使用公开的 DataCachePreload、ICachePreLoad 和 GetICachePreloadStatus。

两套实现复用同一份 mode、host/device ABI、输入和 checksum oracle。DCache 在计时区外用单行 DCCI 建立冷态,再通过相同的 64-round 独立 gap 测量普通 GM load;ICache 使用独立的 32 KiB evictor,并让三种动态路径汇合到同一份 1024-NOP 目标代码,避免把不同目标函数的布局差异误判为 preload 收益。所有计时保留为 raw SYS_CNT,不按未经校准的频率换算时间。

为两套用例增加独立构建运行脚本和最终 ELF 门禁,校验 AIV entry/meta、current-PC path 与 evictor 的最终尺寸、128 B 对齐和地址不重叠。AscendC 脚本从可执行文件提取 .aicore_binary,并检查实际执行的 .vector 符号。

补充使用指南,记录官方接口语义、适用前提、与 DCCI/同步协议的边界、代码布局风险和业务接入验收标准;明确 preload 只是可丢弃的性能 hint,不能承担一致性、发布、顺序或跨核同步。

A5 最终复测:CCEC DCache access 308->5、total 1051->742,ICache work 995->501、total 1908->1451;AscendC DCache access 349->5、total 1159->741,ICache work 1162->792、total 1992->1632。两套实现的 9 样本语义、status、checksum、D2H 和 cleanup 校验全部 PASS;立即等待相对 async 未体现收益。静态检查通过 bash -n、clang-format --dry-run --Werror 和 git diff --cached --check。
在共享 ABI 中新增 store-only baseline/preload 与 publish-to-GM baseline/preload 四个独立 mode,并在 CCEC、AscendC 两套 AIV 探针中保持相同输入、冷态构造、64-round 独立 gap 和 raw SYS_CNT 统计口径。

store-only 的 access/work 只包围 ordinary volatile store,total 在 store 后立即结束,用于判断提前 preload 是否降低单条 store 指令窗口以及是否产生净收益。用于正确性校验的本核回读、CACHELINE_OUT、DSB、bypass read 和 host D2H 全部放在计时终点之后,避免把探针清理误算进只需 store 的业务场景。

publish-to-GM 继续单独统计:access/work 只表示 store 指令窗口,store->GM 从 store 前覆盖 CACHELINE_OUT 与 DSB,total 覆盖可选 preload、相同 gap 和完整发布序列。host 在每个写 mode 前恢复同一 cacheline 初值,并同时校验写者本核普通回读、清理后的 bypass read 与最终 host D2H,防止只测时间而未证明值正确发布。

文档明确记录 PipeBarrier<PIPE_S>() 不能用于该场景:Scalar 流水顺序由硬件保证,官方约束指出 PIPE_S barrier 会触发硬件错误。preload 仍只是把 GM 数据带入 DCache 的性能 hint,不能替代 DCCI、DSB、发布或同步协议。

A5 最终复测:CCEC store-only access 2->2、total 741->742,publish store->GM 512->206、total 1252->942;AscendC store-only access 2->2、total 745->749,publish store->GM 343->121、total 1083->863。前一次有效运行同样表现为 store-only 无稳定下降、两套 publish 均明显下降,因此只对 publish-to-GM 场景保留收益结论。

验证:CCEC 与 AscendC 九种 mode 的 9 样本 launch、checksum、write visibility、ICache status、D2H 和 cleanup 全部 PASS;最终 AIV ELF 的 current-PC path/evictor 尺寸、128 B 对齐和地址不重叠门禁通过;bash -n、clang-format --dry-run --Werror 和 git diff --cached --check 通过。
新增 1:2 mixed CCEC 探针,按当前泳道物理布局连续写 32 B 七字段记录,并分别统计 ordinary store 发射与逐 cacheline DCCI+DSB 发布窗口。host 覆盖 96 worker、单 AIC/AIV、预取距离/密度矩阵、全量 payload 回读及随机依赖 DCache 容量扫描。

A5 真机确认每核 120 KiB、96 核并发下,d16-c1 将 critical issue 降低 40.436%,包含最终发布的 critical total 降低 30.460%,而 flush 段基本不变;随机依赖访问的有效容量拐点约为 16 KiB。同步更新使用指南,区分单条 store、持续顺序写和真实 PA 端到端收益边界。

验证:run_trace_write_preload.sh build;device 0 完整真机矩阵、GM 逐字段校验与 cleanup PASS。当前环境无 task-submit/npu-smi,按已有授权未加锁直跑。
按最新 shared 泳道复刻 40B writer history、128B/384B descriptor 发布与 128B descriptor 消费模型,保留原有 DCCI/DSB 语义。

增加 caller/target current-PC ICache 布局门禁,以及 32 AIC + 64 AIV 的数据、拓扑和清理校验。两轮 A5 实测中,128B/384B 发布关键核总窗口在无 gap 时约下降 9%/25%,有 gap 时约下降 22%/28%;target 内 ICache preload 约下降 41%,远端 caller preload 未见明确收益。

更新使用指南,区分 aggregate core-work 与 wall-clock,明确 source-hot、destination-hot 等测试假设,并说明探针结果不能直接外推为当前 shared PA 端到端收益。
将 shared full-swimlane 固化为普通阶段、Atomic 和 DCCI 的同一编译与运行合同,补齐 shared TensorMap、输出发布、writer history、回收及启动阶段的逐调用观察,并由源码覆盖测试阻止遗漏的裸 Atomic/DCCI。

把 Submit/Claim 保存到每 task 一条 32B 四端点专区,其余 logical TraceRecord 保持 32B 语义、物理存储压缩为 16B;host 严格展开低 32 位时钟和 packed 字段,converter/analyzer 继续消费同一 schema v5。96 核缓冲从 100670272B 降到 57023296B,五组 ABBA 均改善,均值下降 43.033us(1.544%)。

artifact manifest 升级到 v4,固定 mode、variant、phase、generic/SubmitClaim record size、每核容量与 stride;build 和 run 独立推导布局并校验 SHA,拒绝 16B/32B 跨构建混件。full-swimlane host 默认开启 Atomic,避免普通 run/smoke 与 device ELF 合同不一致。

同时收敛稀疏 shared raw 的 EfDrain、Submit、Claim 展开,补齐 Register、Atomic、DCCI 的闭合验证与 Perfetto 显示顺序,并为 AscendC/CPU host 保留公共回调接口兼容。

验证:shared CPU B256、private CPU b1 和全部 C++ 门槛通过;manifest、源码覆盖、converter、analyzer 共 97 项 Python 测试通过;CANN 9.1 CCEC shared 构建通过;A5 B256 完整解码 Submit=2722.660us,execution/semantic/postprocess、依赖签名、Atomic/DCCI、记录容量与 dropped=0 全部通过。
在 atomic_probe 的 CCEC runner 中接入 production shared TensorMap 可见性探针,不复制状态机:kernel 直接调用正式 publish、read 和 lookup helper,host 使用正式 AICPU reset 与共享布局。

两个 AIV 按 task 轮换 writer/reader。reader 在交权前用普通 scalar load 预热旧 committed、reclaim、head、tail、sequence 和 payload cache line;writer 只执行生产发布链。被测窗口不增加额外 DCCI、DSB、全核同步或自造发布 Atomic,诊断 ready/done 使用独占 cache line 并带有限超时与首错快照。

场景覆盖空 task、同 bucket 双 entry、跨 bucket 双 entry、writer 轮换及 CAP=128 三圈以上回绕。A5 device 0 连续 20 个 launch、合计 7880 task 全部通过;commit/reclaim/head/tail/seq/payload/read/lookup 精确一致,protocol_failures=0、semantic_failures=0。
按 Alloc、QK、SF、PV、UP 分解 ordered Register,明确 fresh output descriptor 在 Materialize 发布、ordinary TensorMap 只服务普通 Gm/Local writer、UP 在 Register 发布三条 INOUT writer history;记录 B256 事件数量和各 task 类型中位耗时,避免把长 predecessor wait 误判成 metadata 计算。

记录 production ordinary-ring 可见性探针的 20 次 A5 结果及其证据边界:它证明旧 cache line 预热后的跨核发布稳定,但不替代 fresh-output 与完整 PA 验证。

补充 shared full-swimlane 16B generic record 的字段布局、时钟展开门槛、manifest v4 混件保护和五组 ABBA。物理 trace 从 100670272B 降到 57023296B,mean/median 分别改善 1.544%/1.637%,五组全部同向。
新增 shared claim loser 开销拆解,区分真实 Atomic、EfDrain、Submit 外壳和泳道插桩开销,记录已经撤回的只缩短观察尾部但无净收益候选。

形成有序单写、多读流水的候选协议规格,明确 heap、insert、lookup、build 的阶段关系、历史视图过滤、reader reclaim、发布顺序和需要继续验证的边界;文档明确标注为候选方案,不冒充当前实现。

补充 INOUT/OUTPUT_EXISTING 复写意图竞态分析,说明较晚 reader 如何漏掉尚未发布的前序 writer,以及当前闸门、通用正确性目标和后续性能方案。修正相对链接,直接指向仓内现有 shared 实现记录与 INOUT 分析。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant